<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			// ES6 提供了二进制和八进制数值的新的写法，分别用前缀0b（或0B）和0o（或0O）表示
			0b111110111 === 503 // true
			0o767 === 503 // true
			// 如果要将0b和0o前缀的字符串数值转为十进制，要使用Number方法
			Number('0b111') // 7
			Number('0o10') // 8

			// ES6 在Number对象上，新提供了Number.isFinite()和Number.isNaN()两个方法
			// Number.isFinite()用来检查一个数值是否为有限的（finite），即不是Infinity
			// 注意，如果参数类型不是数值，Number.isFinite一律返回false
			Number.isFinite(0.8); // true
			Number.isFinite(NaN); // false
			Number.isFinite(Infinity); // false
			Number.isFinite(-Infinity); // false
			Number.isFinite('foo'); // false
			// Number.isNaN()用来检查一个值是否为NaN
			// 注意，如果参数类型不是NaN，Number.isNaN一律返回false。
			Number.isNaN(15) // false
			Number.isNaN('15') // false
			Number.isNaN(true) // false
			Number.isNaN(9 / NaN) // true
			Number.isNaN('true' / 0) // true

			// ES6 将全局方法parseInt()和parseFloat()，移植到Number对象上面，行为完全保持不变
			// ES6的写法
			Number.parseInt('12.34') // 12
			Number.parseFloat('123.45#') // 123.45

			// Number.EPSILON
			// ES6 在Number对象上面，新增一个极小的常量Number.EPSILON。根据规格，它表示 1 与大于 1 的最小浮点数之间的差
			Number.EPSILON === Math.pow(2, -52) // true
			Number.EPSILON // 2.220446049250313e-16
			Number.EPSILON.toFixed(20) // "0.00000000000000022204"
			//浮点数比较时设定一个可以接受的最小误差范围
			function withinErrorMargin(left, right) {
				return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
			}
			0.1 + 0.2 // 0.30000000000000004
			0.1 + 0.2 === 0.3 // false
			withinErrorMargin(0.1 + 0.2, 0.3) // true
			// 安全整数和 Number.isSafeInteger()
			// JavaScript 能够准确表示的整数范围在-2^53到2^53之间（不含两个端点），超过这个范围，无法精确表示这个值
			Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
			// Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内
			Number.isSafeInteger('a') // false
			Number.isSafeInteger(null) // false
			Number.isSafeInteger(NaN) // false
			Number.isSafeInteger(Infinity) // false
			Number.isSafeInteger(-Infinity) // false
			Number.isSafeInteger(9007199254740990) // true
			Number.isSafeInteger(9007199254740992) // false
			Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // true
			Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // false

			// Math 对象的扩展
			// ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法，只能在 Math 对象上调用
			// Math.trunc方法用于去除一个数的小数部分，返回整数部分
			// Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值，会先将其转换为数值
			// Math.cbrt方法用于计算一个数的立方根
			// Math.log10(x)返回以 10 为底的x的对数。如果x小于 0，则返回 NaN
			// Math.sinh(x) 返回x的双曲正弦（hyperbolic sine）
			// Math.cosh(x) 返回x的双曲余弦（hyperbolic cosine）
			// .....其他自行查询 api

			// ES2016 新增了一个指数运算符（**）
			2 ** 2 // 4
			2 ** 3 // 8
			2 ** 3 ** 2 // 相当于 2 ** (3 ** 2)
			let a = 1.5;
			a **= 3; // 等同于 a = a * a * a;
		</script>
	</body>
</html>
